// 1. 抽订单共性：所有订单都有的属性
function Order(orderId, phone, address, extra) {
  this.orderId = orderId;   // 不变：每个订单都有订单号
  this.phone = phone;       // 不变：每个订单都有手机号
  this.address = address;   // 不变：每个订单都有地址
  this.extra = extra;       // 变：不同订单的额外信息（口味/保鲜）
}

// 2. 订单工厂：处理“个性”，创建订单
function OrderFactory(orderId, phone, address, orderType, extraInfo) {
  let extra; // 存储个性信息
  switch(orderType) {
    case '餐饮':
      extra = { tasteNote: extraInfo }; // 餐饮的个性：口味备注
      break;
    case '生鲜':
      extra = { freshReq: extraInfo };  // 生鲜的个性：保鲜要求
      break;
    case '鲜花':
      extra = { flowerReq: extraInfo };
      break;
  }
  // 统一创建订单并返回
  return new Order(orderId, phone, address, extra);
}

// 3. 测试：只需传参数，不用管判断逻辑
const foodOrder = OrderFactory(     
  '123456',        // 订单号
  '13800138000',   // 手机号
  'XX小区1号楼',   // 地址
  '餐饮',          // 订单类型
  '少辣、多放醋'   // 餐饮个性信息
);

const freshOrder = OrderFactory(
  '654321',
  '13900139000',
  'YY小区3号楼',
  '生鲜',
  '冷藏配送、避免挤压'
);

const flowerOrder = OrderFactory(
  '987654',
  '13700137000',
  'ZZ小区5号楼',
  '鲜花',
  '生日花'
);

console.log(foodOrder); // 少辣、多放醋
console.log(freshOrder); // 冷藏配送、避免挤压
console.log(flowerOrder);

// 1. 抽文档共性：所有文档都有的属性
function Document(docName, author, createTime, spec) {
  this.docName = docName;   // 不变：文档名
  this.author = author;     // 不变：作者
  this.createTime = createTime; // 不变：创建时间
  this.spec = spec;         // 变：不同文档的特殊属性（字数/行数/页数）
}

// 2. 文档工厂：处理个性，创建文档
function DocumentFactory(docName, author, docType, specValue) {
  const createTime = new Date().toLocaleString(); // 统一生成当前时间（不变）
  let spec; // 存储个性属性
  switch(docType) {
    case 'Word':
      spec = { wordCount: specValue }; // Word个性：字数
      break;
    case 'Excel':
      spec = { rowCount: specValue };  // Excel个性：行数
      break;
    case 'PPT':
      spec = { slideCount: specValue }; // PPT个性：页数
      break;
  }
  // 统一创建文档并返回
  return new Document(docName, author, createTime, spec);
}

// 3. 测试：快速创建不同文档
const reportDoc = DocumentFactory(
  '季度报告', 
  '张三', 
  'Word', 
  2500 // Word文档字数
);

const dataSheet = DocumentFactory(
  '销售数据', 
  '李四', 
  'Excel', 
  120 // Excel表格行数
);

console.log(reportDoc); // 自动生成的当前时间（如2025/9/28 15:30:00）
console.log(dataSheet); // 120